﻿Imports System.Transactions

Public Class LogicaAlquiler
    Public Sub AlquilarPelicula(ByVal peliculaCodigoDeBarras As String, ByVal socioDNI As String)
        Using tx As New TransactionScope
            '1 - Comprobar stock
            Dim adapterPeliculas As New EjercicioDataSetTableAdapters.PeliculaTableAdapter()
            Dim adapterSocios As New EjercicioDataSetTableAdapters.SocioTableAdapter()
            Dim dataSet As New EjercicioDataSet()

            adapterPeliculas.FillByCodigoDeBarras(dataSet.Pelicula, peliculaCodigoDeBarras)

            If (dataSet.Pelicula.Count = 0) Then
                Throw New PeliculaNoExisteException("No existe la película")
            End If
            If (dataSet.Pelicula(0).stock = 0) Then
                Throw New PeliculaSinStockException("No hay unidades disponibles")
            End If

            adapterSocios.FillByDNI(dataSet.Socio, socioDNI)
            If (dataSet.Socio.Count = 0) Then
                Throw New SocioNoExisteException("No existe el socio")
            End If

            '2 - Decrementar stock
            dataSet.Pelicula(0).stock -= 1
            adapterPeliculas.Update(dataSet)

            '3 - Agregar alquiler
            Dim adapterAlquiler As New EjercicioDataSetTableAdapters.AlquilerTableAdapter()

            Dim nuevoAlquiler As EjercicioDataSet.AlquilerRow = dataSet.Alquiler.NewAlquilerRow()
            nuevoAlquiler.BeginEdit()
            nuevoAlquiler.pelicula_codigo_barras = peliculaCodigoDeBarras
            nuevoAlquiler.fecha_alquiler = Date.Now
            nuevoAlquiler.socio_dni = socioDNI
            nuevoAlquiler.EndEdit()
            dataSet.Alquiler.AddAlquilerRow(nuevoAlquiler)
            'adapterAlquiler.Update(dataSet.Alquiler)
            Dim adapterManager As New EjercicioDataSetTableAdapters.TableAdapterManager()
            adapterManager.SocioTableAdapter = adapterSocios
            adapterManager.AlquilerTableAdapter = adapterAlquiler
            adapterManager.UpdateAll(dataSet)
            tx.Complete()
        End Using

    End Sub
End Class
